/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package wf3.core.dao;

import java.util.Date;
import java.util.List;
import org.hibernate.StatelessSession;
import wf.dto.geocon.GeocapDto;
import wf.dto.geocon.GeocapvalDto;
import wf.dto.geocon.GeoconDto;
import wf.dto.geocon.Pblispuncon;
import wf.dto.geocon.GeopuncapDto;
import wf.dto.pfins_tbfrawor;
import wf.dto.pptransaini;
import wf.dto.qbfrawor_id_frawor;
import wf3.core.ManagerQuery;
import wf3.core.user.User;
import wf3.gps.PunConfig;
import wf3.gps.Punto;
import wf3.hibernate.WQuery;
import wf3.log.Log;

/**
 *
 * @author romulogalindo
 */
public class GContenedorDAO extends DAO {

    StatelessSession session;
    ManagerQuery query;
    private Log log = new Log(getClass());

    public GContenedorDAO() {
        this.session = acceso.hibernate.AccesoHibernate.getSessionFactory().openStatelessSession();
        this.query = new ManagerQuery();
    }

    public GContenedorDAO(int id_usuari, String co_usuari) {
        this.session = acceso.hibernate.AccesoHibernate.getSessionFactory().openStatelessSession();
        this.query = new ManagerQuery();
        log.setCo_usuari(co_usuari);
        log.setId_usuari(id_usuari);
    }

    public GContenedorDAO(User user) {
        this.session = acceso.hibernate.AccesoHibernate.getSessionFactory().openStatelessSession();
        this.query = new ManagerQuery();
        log.setId_usuari(user.getId());
        log.setCo_usuari(user.getCo_usuari());
    }

    /**
     * Genera el ID_FRAWOR
     *
     */
    public int NEW_IDFRAWOR() {
        WQuery q = query.GET_QUERY(session, "frawor2.qbfrawor_id_frawor");
        q.setString("frawor", "fratra.qbfrawor_id_frawor");
        qbfrawor_id_frawor qbfrawor = (qbfrawor_id_frawor) q.uniqueResult();
        log.log(q.SQLQuery());
        return qbfrawor.getNextval();
    }

    /**
     * Genera el ID_TRANSA
     *
     */
    public int NEW_IDTRANSA(String p_ip_remoto, int p_id_sesion, Date p_fe_solini) {
        WQuery q = query.GET_QUERY(session, "frawor2.pptransaini");
        q.setString("ip_remoto", p_ip_remoto);
        q.setInteger("id_session", p_id_sesion);
        q.setTimestamp("fe_solini", p_fe_solini);
        pptransaini transa = (pptransaini) q.uniqueResult();
        log.log(q.SQLQuery());
        return transa.getPptransaini();
    }

    /**
     * Conjuga la session, id_frawor, id_fraant y el co_conten
     *
     * @param p_id_sesion
     * @param p_id_frawor
     * @param p_id_fraant
     * @param p_co_conten
     */
    public boolean INNER_SESSION(int p_id_sesion, int p_id_frawor, int p_id_fraant, int p_co_conten) {
        WQuery q = query.GET_QUERY(session, "frawor2.pfins_tbfrawor");
        q.setInteger("p_id_sesion", p_id_sesion);
        q.setInteger("p_id_frawor", p_id_frawor);
        q.setInteger("p_id_fraant", p_id_fraant);
        q.setInteger("p_co_conten", p_co_conten);
        pfins_tbfrawor qbfrawor = (pfins_tbfrawor) q.uniqueResult();
        log.log(q.SQLQuery());
        return qbfrawor == null ? false : true;
    }

    /**
     * Consigue el DTO del contenedor
     *
     * @param p_co_conten
     */
    public GeoconDto GET_CONTENDOR(int p_co_geocon) {
        WQuery q = query.GET_QUERY(session, "frageo.pbgeocon");
        q.setInteger("p_co_geocon", p_co_geocon);//p_id_geocon cambiara por p_co_geocon
        GeoconDto c = (GeoconDto) q.uniqueResult();
        log.log(q.SQLQuery());
        return c;
    }

    /**
     * Consigue la lista de puntos por geocontenedor
     *
     * @param p_co_conten
     */
    public List<Pblispuncon> GET_LIST_POINTS(int p_co_geocon) {
        WQuery q = query.GET_QUERY(session, "frageo.pblispuncon");
        q.setInteger("p_co_geocon", p_co_geocon);
        List<Pblispuncon> l = q.list();
        log.log(q.SQLQuery());
        return l;
    }

    /**
     * Consigue la lista de filtros(capas) por contenedor
     *
     * @param p_co_conten
     */
    public List<GeocapDto> GET_LIST_FILTERS(int p_co_geocon) {
        WQuery q = query.GET_QUERY(session, "frageo.pbgeocap");
        q.setInteger("p_co_geocon", p_co_geocon);
        List<GeocapDto> l = q.list();
        log.log(q.SQLQuery());
        return l;
    }

    /**
     * Consigue la lista de agrupamientos por contenedor y filtro
     *
     * @param p_co_conten
     */
    public List<GeocapvalDto> GET_LIST_GROUPS(int p_co_geocon, int p_nu_filter) {
        WQuery q = query.GET_QUERY(session, "frageo.pbgeocapval");
        q.setInteger("p_co_geocon", p_co_geocon);
        q.setInteger("p_nu_geocap", p_nu_filter);
        List<GeocapvalDto> l = q.list();
        log.log(q.SQLQuery());
        return l;
    }
    
    /**
     * Consigue la lista de agrupamientos por contenedor y filtro
     *
     * @param p_co_conten
     */
    public List<GeopuncapDto> GET_LIST_POINTS_FOR_GROUPS(int p_co_geocon, int p_nu_filter, int p_nu_group) {
        WQuery q = query.GET_QUERY(session, "frageo.pbgeopuncap");
        q.setInteger("p_co_geocon", p_co_geocon);
        q.setInteger("p_nu_geocap", p_nu_filter);
        q.setInteger("p_nu_capval", p_nu_group);
        List<GeopuncapDto> l = q.list();
        log.log(q.SQLQuery());
        return l;
    }

    @Override
    public void CLOSE_SESSION() {
        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    }

    @Override
    public long getIdDAO() {
        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    }

    @Override
    public long getTimelife() {
        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    }

    @Override
    public boolean isClosed() {
        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    }
}
